home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / LIBRARY / PAS_0793 / SNDFORMS.TXT < prev    next >
Text File  |  1993-08-01  |  31KB  |  621 lines

  1. ─ Fido Pascal Conference ────────────────────────────────────────────── PASCAL ─
  2. Msg  : 345 of 353                                                               
  3. From : EDWARD SCHLUNDER                    1:114/151.0          24 Jul 93  05:18 
  4. To   : MATTHEW MCLIN                                                             
  5. Subj : Format of MOD, SAM (1/9)                                               
  6. ────────────────────────────────────────────────────────────────────────────────
  7. <-=-=-=-=- Matthew Mclin to All -=-=-=-=>
  8.  MM> Does anybody know the format of MOD/SAM/WAV/VOC file? Info on any
  9.  MM> of those formats (how to read/write/play them using a PC Speaker or
  10.  MM> LPT 1 with a mono DAC) would be greatly appreciated.
  11.  
  12.       You know, you are quite lucky that I just decided to pickup the
  13.    Pascal echo even though I'm not a Pascal programmer. I have ALL of
  14.    these file formats! Lucky you! I have had to search high and low all
  15.    over the place for this junk and you're getting it all in one shot.
  16.       Not only do I have those file formats, but I also understand how to
  17.    play them back on the PC's Internal Speaker, LPT DACs, and Sound
  18.    Blaster. I'll be posting that too.
  19.       I have been interested in this field for quite a while, that's how I
  20.    gather up all this information. If I had enough ambition, time, and
  21.    patience, I'd probably write a book on it all because there is not ONE
  22.    SINGLE book that explains how to play digital sound directly (ie,
  23.    without specail drivers), with such drivers, what the file formats are,
  24.    and includes code to do all that stuff.
  25.       Gee, I bet that would make a lot of money, perhaps I should do that
  26.    after all.... Those guys on the 80XXX Assembler echo would probably be
  27.    able to do a better job as they are more knowledgable on this, but most
  28.    of them are into writing demos and creating faster/better MOD players..
  29.       Ok, since this will take up a lot of room, I'll be splitting it up
  30.    into seperate messages. The simpilest stuff goes in this message.
  31.  
  32.  MM> I would also like info on raw sound data and how to edit/play it.
  33.  
  34.       Newbe to Digital Sound, eh? Well, you've come to the right place for
  35.    information, or rather, the right person has come to you. Ok, the
  36.    basics. A digital sound file is basically just a bunch of volume
  37.    settings. On the PC, a volume setting of 128 is normally silence.
  38.    Values farther away from 128 in either direction are louder depending
  39.    on its distance from 128. 0 and 255 are the loudest volumes.
  40.       One thing I should make clear, 128 is not nessicarily silence. When
  41.    making a recording, there is always background noise. So, what may
  42.    sound like silence to you, is actually 126-130 or so.
  43.       Now, you have probably seen those neat little graphs that some
  44.    programs make when displaying a digital sound file. VEdit (which comes
  45.    with the Sound Blaster) shows the waveform in the modify part of it. If
  46.    you wanted to display a graph yourself, you could just load in a byte
  47.    from the file, then, use that byte for the Y location. The X location
  48.    is where in the file you are at (which byte). You just keep loading in
  49.    bytes until the end of the screen.
  50.       I could go on and on, but this is just a message, not a book! Hmm,
  51.    you said you wanted to play a digital sound file on the PC's Internal
  52.    Speaker and on a printer port DAC. Well, here comes that part. I'll
  53.    explain usage of printer port DACs first because they are easier to
  54.    understand.
  55.       To play a VOC, WAV, SND, etc file on the DAC, you just read in one
  56.    byte from the file, output it to the printer port, and do it again but
  57.    on the next byte. To get the I/O address of the printer port, read the
  58.    word at memory location 40h:8h for LPT1, 40h:0Ah for LPT2, 40h:0Ch for
  59.    LPT3, and if on a non-ps/2, 40h:0Eh for LPT4.
  60.       The internal speaker is a bit more tricky, you have to do certain
  61.    things to set it up correctly before outputting sound. Before you do
  62.    ANY sound output, you must do the following (sorry, I'm not a Pascal
  63.    programmer, so this is in Assembler):
  64.  
  65.    Out   43h, 0B6h                     ;Please make note: This code was
  66.    Out   42h, 0FFh                     ;written by a friend of mine in
  67.    Out   42h, 0                        ;australia named Phil Inch. He
  68.    Out   43h, 90h                      ;posted code in the 80x86 Assembler
  69.    In    ax, 61h                       ;echo (GTPN, not Fido) for the
  70.    Or    ax, 3                         ;public domain. Thanks Phil!!
  71.    Out   61h, ax
  72.  
  73.       Ok, the above sets the timer chip up correctly. From there it is
  74.    pretty simple. Get a byte from the sound file. Divide the byte by a
  75.    'shift' number (I'll explain about this later). Then, output this new
  76.    byte to port 42h. Repeat this for the whole file.
  77.       Ok, now, about that shift value. The PC's Internal Speaker wasn't
  78.    designed for playing digital sound on it, it's just that brainy guys
  79.    like Phil have figured out how to do with software what should have
  80.    been done with hardware.. Anyway, the PC's Internal Speaker isn't very
  81.    loud, so the range of volumes is much less than on a Sound Blaster or
  82.    printer port DAC. This shift value varies from computer to computer, it
  83.    depends on the size of your speaker and other stuff. Genernally, a
  84.    shift value of 4 works on all computers. On my computer, I can get
  85.    anyway with 3 on most files. The smaller the shift value, the louder
  86.    the file will be played, but too small a shift value will cause
  87.    distortion. Experiment!
  88.       After you are finished playing the sound file, you must put the
  89.    timer chip back the way it was supposed to be, or otherwise the next
  90.    program that tries to make a noise on the internal speaker will make
  91.    the noise but will not stop! Here is the code for that (again, sorry
  92.    about the Assembler, it's just that I'm not a Pascal programmer):
  93.  
  94.    Out   43h, 0B6h
  95.    In    ax, 61h
  96.    And   ax, 0FCh
  97.    Out   61h, ax
  98.  
  99.       There, that should do it. I hope I haven't totally confused you.
  100.    Please write back if you have ANY questions what-so-ever. Gee, I'm
  101.    already on line 107, time to go to a new message!
  102.  
  103.  MM> Note that these .MOD
  104.  MM> and .SAM files are in the Amiga Module format (just incase there are
  105.  MM> any others). Oh, there's also the .SND files. Or even .MID/.MDI files
  106.  MM> if you can play them thru a DAC on an LPT port or the PC Speaker. Note
  107.  MM> that I don't have a Sound Blaster (or any other sound card). Thanks.
  108.  
  109. SAM Files:
  110.  
  111.       As far as I know, these do not contain any header or specific
  112.    structure. They are just raw sound files. The only trick you have to
  113.    remember about these files are that they are signed, which means that
  114.    when the 7th bit is set, the number is negative. When the 7th bit is
  115.    clear, the number is positive. This is completely different from
  116.    digital sound files that originated on the PC. Remember, MOD and SAM
  117.    files originated from the Amiga, so they have this weird encoding.
  118.  
  119.       To convert a signed file to an unsigned file, just read in one byte
  120.    from the original file. Add 128 to that byte. Output the answer to a
  121.    new file. In the Amiga world, a byte of 0 is equalivilent to silence.
  122.    A byte of -128 (and +128) is as loud as it gets on the Amiga.  On the
  123.    PC, however, 0 (and 255) is as loud as it gets. A byte of 128 is
  124.    equalivilent to silence on the PC. So, when we add 128 to a -128, we
  125.    get a zereo, which is the same volume for a 128 on the Amiga.
  126.  
  127. WAV Files:
  128.  
  129.       The following text was written by Edward Schlunder and was based on
  130.    information provided by Tony Cook on the GT Power Network's 80x86
  131.    Assmebler echo.
  132.  
  133.                                WAV File Format
  134.                        By: Edward Schlunder. 5-17-93
  135.  
  136.  BYTE(S)        NORMAL CONTENTS               PURPOSE/DESCRIPTION
  137.  ---------------------------------------------------------------------------
  138.  
  139.  00 - 03        "RIFF"                        Just an identification block.
  140.                                               The quotes are not included.
  141.  
  142.  04 - 07        ???                           This is a long integer. It
  143.                                               tells the number of bytes long
  144.                                               the file is, includes header
  145.                                               size.
  146.  
  147.  08 - 11        "WAVE"                        Just an other I.D. thing.
  148.  
  149.  12 - 15        "fmt "                        Just an other I.D. thing.
  150.  
  151.  16 - 19        16, 0, 0, 0                   Size of header to this point.
  152.  
  153.  20 - 21        1, 0                          Format tag.
  154.  
  155.  22 - 23        1, 0                          Channels
  156.  
  157.  24 - 27        ???                           Sample rate, or (in other
  158.                                               words), samples per second.
  159.  
  160.  28 - 31        ???                           Average bytes per second.
  161.  
  162.  32 - 33        1, 0                          Block align.
  163.  
  164.  34 - 35        8, 0                          Bits per sample. Ex: Sound
  165.                                               Blaster can only do 8, Sound
  166.                                               Blaster 16 can make 16.
  167.                                               Normally, the only valid values
  168.                                               are 8, 12, and 16.
  169.  
  170.  36 - 39        "data"                        Marker that comes just before
  171.                                               the actual sample data.
  172.  
  173.  40 - 43        ???                           The number of bytes in the
  174.                                               sample.
  175.  
  176.      Information from Tony Cook, Australia. GT Power 80x86 Assembler echo.
  177.  
  178.  MM> Does anybody know the format of .MOD/.SAM/.WAV/.VOC file? Info on any
  179.  MM> of those formats (how to read/write/play them using a PC Speaker or
  180.  MM> LPT 1 with a mono DAC) would be greatly appreciated. I would also like
  181.  
  182. VOC File Format:
  183.  
  184.       This file format was written by Phil Inch on the 80x86 Assembler
  185.    echo on the GTPN. Thanks Phil!!
  186.  
  187. BYTE(S)        NORMAL CONTENTS               PURPOSE/DESCRIPTION
  188. ---------------------------------------------------------------------------
  189.  
  190. 00 - 19        "Creative Voice File", 26     Just an identification block.
  191.                                              The quotes are not included,
  192.                                              and the 26 is byte 26 (1Ah) which
  193.                                              is an end-of-file marker.  There-
  194.                                              fore, if you TYPE a VOC file, you
  195.                                              will just see Creative Voice File.
  196.  
  197. 20 - 21        26, 00                        This is a low byte, high byte
  198.                                              sequence which gives the offset
  199.                                              of the first block of sound data
  200.                                              in the file.  Currently this is
  201.                                              26 ( 00 x 256 + 26 ) which is the
  202.                                              length of the header, but it's
  203.                                              probably good programming practice
  204.                                              to read and use this value anyway
  205.                                              in case the format changes later.
  206.  
  207. 22 - 23        10,1                          These bytes give the version
  208.                                              number of the VOC file, subnumber
  209.                                              first, then main number.  The
  210.                                              default, as you can see, is 1.10.
  211.  
  212. 24 - 25        41,17                         These bytes are "check digits".
  213.                                              These allow you to be absolutely
  214.                                              SURE that you are working with a
  215.                                              VOC file.  To use them, convert
  216.                                              the version number (above) and
  217.                                              this number to integers.  Do this
  218.                                              with the formula below, where for
  219.                                              convention the above bytes have
  220.                                              been listed as byte1, byte2.
  221.  
  222.                                              (byte2*256)+byte1
  223.  
  224.                                              Therefore, for the default values
  225.                                              we get the following integers:
  226.  
  227.                                              (1 x 256)+10     =  266
  228.                                              (17 x 256)+41    = 4393
  229.  
  230.                                              When you add the two results, you
  231.                                              get 4659.  If you do these calcs
  232.                                              and get 4659, then you can be
  233.                                              almost certain you're working with
  234.                                              a VOC file.
  235.  
  236. OK, that takes care of the header information.  I hope you realise that I'll
  237. never get a registration for VOCHDR now!  Oh well <sigh> perhaps people will
  238. buy my games!
  239.  
  240.    Having gotten to byte 26, we now start encountering data blocks.  There
  241. are eight types in all, conveniently numbered 0 - 7.  For each block, the
  242. first byte will always tell you the type.
  243.  
  244. For notational convenience, bx means byte x, eg b5 means byte 5.
  245.  
  246. BLOCK 0 - THE "END BLOCK"
  247.  
  248.    Structure:     Byte 1: '0' to denote "end block" type
  249.  
  250.    This block is located at the END of a VOC file.  When a VOC player
  251.    encounters a block 0, it should stop playing the VOC file.
  252.  
  253.  
  254. BLOCK 1 - THE "DATA BLOCK"
  255.  
  256.    Structure:     Byte 1: '1' to denote "data block" type
  257.  
  258.                        2: \
  259.                        3: | These bytes give the length:
  260.                        4: / b2 + (b3*256) + (b4*65536)
  261.  
  262.                        5: Sampling rate: Calculated as 1000000 / (256-b5)
  263.  
  264.                        6: Pack type byte:
  265.                               0 = data is not packed
  266.                               1 = data is packed to four bits
  267.                               2 = data is packed to 2 bits
  268.                               3 = data is packed to 1 bit
  269.  
  270.                        7: Actual sample data starts here
  271.  
  272.  
  273. BLOCK 2 - THE "MORE DATA BLOCK"
  274.  
  275.    Structure:     Byte 1: '2' to denote "more data block" type
  276.  
  277.                        2: \
  278.                        3: | These bytes give the length:
  279.                        4: / b2 + (b3*256) + (b4*65536)
  280.  
  281.                        5: Actual sample data starts here
  282.  
  283.    The point of this is simple:  If you have a sample that you want to chop
  284.    up into smaller portions (the maximum block length in a VOC file is
  285.    16,842,751 bytes but who's counting?), then define a "more data" block.
  286.    This "carries over" the previously found sampling rate and pack type byte,
  287.    so a "data block" should have been encountered earlier somewhere along
  288.    the line.
  289.  
  290.  
  291. BLOCK 3 - THE "SILENCE" BLOCK
  292.  
  293.    Structure:     Byte 1: '3' to denote "silence block" type
  294.  
  295.                        2: \
  296.                        3: | These bytes give the length:
  297.                        4: / b2 + (b3*256) + (b4*65536)
  298.  
  299.                           (Note that this value is usually 3 for a
  300.                           silence block.)
  301.  
  302.                        5: Duration ( b5+(b6*255) ).  This gives the equivalent
  303.                        6: number of bytes to "play" during the silence.
  304.  
  305.                        7: Sampling rate: Calculated as 1000000 / (256-b5)
  306.  
  307.    A silence block is used for long periods of silence.  When long silences
  308.    are required, it's more efficient in size terms to insert one of these
  309.    blocks, as seven bytes can then represent up to 65,536.
  310.  
  311. BLOCK 4 - THE "MARKER BLOCK"
  312.  
  313.    Structure:     Byte 1: '4' to denote "marker block" type
  314.  
  315.                        2: \
  316.                        3: | The length of the block, as usual
  317.                        4: /
  318.  
  319.                        5: Marker value, as low-high (ie b5 + (b6*255) )
  320.                        6:
  321.  
  322.    The marker block is read by CT-VOICE.DRV.  When a marker block is
  323.    encountered, the value in the marker value bytes (5 and 6) is copied into
  324.    the status word specified when CT-VOICE was initialized.
  325.  
  326.    This allows your program to judge where in the sample you currently are,
  327.    thus allowing for progress counters and the like.  It's also useful if
  328.    you're trying to synchronize other processes to the playing of the sound.
  329.  
  330.    For example, by using appropriate marker blocks, you could send signals
  331.    to your software to move the lips of a person on-screen in time with the
  332.    speech in the VOC.  However, this does take some doing and a VERY good
  333.    VOC editor!
  334.  
  335.  
  336. BLOCK 5 - THE "MESSAGE BLOCK"
  337.  
  338.    Structure:     Byte 1: '5' to denote "message block" type
  339.  
  340.                        2: \
  341.                        3: | The length of the block, as usual
  342.                        4: /
  343.  
  344.                    5 - ?: Message, as ASCII text.
  345.  
  346.                        ?: 0, to denote end of text
  347.  
  348.    The message block simply allows you to embed text into a VOC file.
  349.    Presumably you could use this to detect when other people have pinched
  350.    your VOC files for their own applications.
  351.  
  352.  
  353. BLOCK 6 - THE "REPEAT BLOCK"
  354.  
  355.    Structure:     Byte 1: '6' to denote "repeat block" type
  356.  
  357.                        2: \
  358.                        3: | The length of the block, as usual
  359.                        4: /
  360.  
  361.                        5: Number of times that data should be repeated
  362.                        6: Total = 1 + b5 + (b6*255)
  363.  
  364.    Every "playable" data block between a block 6 and a block 7 will be repeated
  365.    the number of times specified in b5 and b6.  Note that you add one to this
  366.    value - the data blocks are ALWAYS played at least once.  However, if b5
  367.    and b6 are zero, then you really don't need a repeat block, do you!
  368.  
  369.    I'm told that you cannot "nest" repeat blocks, but I've never tried it.
  370.    This limitation would only apply to CT-VOICE.DRV I would have thought, but
  371.    it depends how good other VOC players are.
  372.  
  373.  
  374. BLOCK 7 - THE "END REPEAT BLOCK"
  375.  
  376.    Structure:     Byte 1: '7' to denote "end repeat block" type
  377.  
  378.                        2: \
  379.                        3: | The length of the block, as usual
  380.                        4: /
  381.  
  382.    This, as explained, marks the end of the block of blocks (!) that you wish
  383.    to repeat.  Note that the "length" is always zero, so I don't know why
  384.    the length bytes are required at all.
  385. ---------------------------------------------------------------------
  386.  
  387. This was picked up off the 80XXX Assembler echo on FidoNet. There are many
  388. other file formats for MODs, but I have found this one to be most complete
  389.  
  390. Protracker 2.3A Song/Module Format:
  391. -----------------------------------
  392.  
  393. Offset  Bytes  Description
  394. ------  -----  -----------
  395.    0     20    Songname. Remember to put trailing null bytes at the end...
  396.                When written by ProTracker this will be only uppercase;
  397.                there are only historical reasons for this. (And the
  398.                historical reason is that Karsten Obarski, who made the
  399.                first SoundTracker, was stupid.)
  400.  
  401. Information for sample 1-31:
  402.  
  403. Offset  Bytes  Description
  404. ------  -----  -----------
  405.   20     22    Samplename for sample 1. Pad with null bytes. Will only be
  406.                uppercase.  The samplenames are often used for storing
  407.                messages from the author; in particular, samplenames
  408.                starting with a '#' sign will generally be a message.  This
  409.                convention is a result of a player called IntuiTracker
  410.                displaying all samples starting with # as a message to the
  411.                person playing the module.
  412.   42      2    A WORD with samplelength for sample 1.  Stored as number of
  413.                words.  Multiply by two to get real sample length in bytes.
  414.                This is a big-endian number; for all PC programmers out
  415.                there, this means that to get your 8-bit-orginated format,
  416.                you have to swap the two bytes.
  417.   44      1    Lower four bits are the finetune value, stored as a signed
  418.                four bit number. The upper four bits are not used, and
  419.                should be set to zero.
  420.                They should also be masked out reading; you can never be
  421.                sure what some stupid program could have stored here...
  422.   45      1    Volume for sample 1. Range is $00-$40, or 0-64 decimal.
  423.   46      2    Repeat point for sample 1. Stored as number of words offset
  424.                from start of sample. Multiply by two to get offset in bytes.
  425.   48      2    Repeat Length for sample 1. Stored as number of words in
  426.                loop. Multiply by two to get replen in bytes.
  427.  
  428. Information for the next 30 samples starts here. It's just like the info for
  429. sample 1.
  430.  
  431. Offset  Bytes  Description
  432. ------  -----  -----------
  433.   50     30    Sample 2...
  434.   80     30    Sample 3...
  435.    .
  436.    .
  437.    .
  438.  890     30    Sample 30...
  439.  920     30    Sample 31...
  440.  
  441. Offset  Bytes  Description
  442. ------  -----  -----------
  443. .
  444.  950      1    Songlength. Range is 1-128.
  445.  951      1    This byte is set to 127, so that old trackers will search
  446.                through all patterns when loading.
  447.                Noisetracker uses this byte for restart, ProTracker doesn't.
  448.  952    128    Song positions 0-127.  Each hold a number from 0-63 (or
  449.                0-127) that tells the tracker what pattern to play at that
  450.                position.
  451. 1080      4    The four letters "M.K." - This is something Mahoney & Kaktus
  452.                inserted when they increased the number of samples from
  453.                15 to 31. If it's not there, the module/song uses 15 samples
  454.                or the text has been removed to make the module harder to
  455.                rip. Startrekker puts "FLT4" or "FLT8" there instead.
  456.                If there are more than 64 patterns, PT2.3 will insert M!K!
  457.                here. (Hey - Noxious - why didn't you document the part here
  458.                relating to YOUR OWN PROGRAM? -Vishnu)
  459.  
  460. Offset  Bytes  Description
  461. ------  -----  -----------
  462. 1084    1024   Data for pattern 00.
  463.    .
  464.    .
  465.    .
  466. xxxx  Number of patterns stored is equal to the highest patternnumber
  467.       in the song position table (at offset 952-1079).
  468.  
  469.   Each note is stored as 4 bytes, and all four notes at each position in
  470. the pattern are stored after each other.
  471.  
  472. 00 -  chan1  chan2  chan3  chan4
  473. 01 -  chan1  chan2  chan3  chan4
  474. 02 -  chan1  chan2  chan3  chan4
  475. etc.
  476.  
  477. Info for each note:
  478.  
  479.  _____byte 1_____   byte2_    _____byte 3_____   byte4_
  480. /                \ /      \  /                \ /      \
  481. 0000          0000-00000000  0000          0000-00000000
  482.  
  483. Upper four    12 bits for    Lower four    Effect command.
  484. bits of sam-  note period.   bits of sam-
  485. ple number.                  ple number.
  486.  
  487.  
  488.  MM> Does anybody know the format of .MOD/.SAM/.WAV/.VOC file? Info on any
  489.  
  490.       One thing you should keep in mind about MOD files is that they
  491.    originated from the Amiga, so the samples are signed, see the
  492.    discussion about SAM files for more information.
  493.  
  494. Note:
  495.        Sounder and Sound Tool both use the same file extension, but have
  496.  different file formats. To tell the difference, Read the first 6 bytes
  497.  of the file. If it matches the magic number for Sound Tool .SND files,
  498.  it is a Sound Tool file. Else, it's a Sounder file or a raw file.
  499.  
  500.  
  501. Sounder File Format:
  502.  
  503.  BYTE(S)        NORMAL CONTENTS               PURPOSE/DESCRIPTION
  504.  ---------------------------------------------------------------------------
  505.  
  506.  00 - 01        0, 0                          Bits per sample. Ex: Sound
  507.                                               Blaster can only do 8, Sound
  508.                                               Blaster 16 can make 16.
  509.                                               Normally, the only valid value
  510.                                               is 0, which is the code for an
  511.                                               8 bit sample. Future versions
  512.                                               of Sounder and DSOUND.DLL may
  513.                                               allow 16 bit samples and such.
  514.  
  515.  02 - 03        ???                           Sampling rate. Currently, only
  516.                                               22 KHz, 11 KHz, 7.33 KHz, and
  517.                                               5.5 KHz are valid. If given a
  518.                                               value like 9 KHz, it will be
  519.                                               played at the next closest rate
  520.                                               (in this case, 11 KHz). The
  521.                                               sampling rate is calculated as
  522.                                               follows:
  523.  
  524.                                               SampRate = Byte1 + (256 * Byte2)
  525.  
  526.  04 - 05        ???                           Volume to play the sample back
  527.                                               at. Note: On the PC's Internal
  528.                                               Speaker, there is a definite
  529.                                               upper limit as to the volume,
  530.                                               depending on the shift value
  531.                                               (see below). The Sound Blaster
  532.                                               and the Disney Sound Source
  533.                                               aren't quite as restricted,
  534.                                               but still are at some high
  535.                                               value.
  536.  
  537.  06 - 07        4, 0                          Shift value. This is the number
  538.                                               that each byte is divided by to
  539.                                               "scale" the volume down to a
  540.                                               point where the PC's Internal
  541.                                               Speaker can handle it. See the
  542.                                               discussion on playing back
  543.                                               digitalized sound for more
  544.                                               details.
  545.  
  546.    Information from Sounder text files and Sound Tool help (.HLP) files.
  547.                        Rewritten by Edward Schlunder
  548.  
  549.  
  550. Sound Tool File Format:
  551.  
  552.  BYTE(S)        NORMAL CONTENTS               PURPOSE/DESCRIPTION
  553.  ---------------------------------------------------------------------------
  554.  
  555.  00 - 05        "SOUND", 26                   Just an identification thing.
  556.                                               Helps a lot when you are trying
  557.                                               to distinguish between Sounder
  558.                                               .SND files and Sound Tool .SND
  559.                                               files.
  560.  
  561.  08 - 11        ???                           This is the number of bytes in
  562.                                               the sample. It is calculated as
  563.                                               follows:
  564.  
  565.        ByteSam = Byte1 + (256 * Byte2) + (512 * Byte3) + (768 * Byte4)
  566.  
  567.  12 - 15        ???                           This points to the first byte
  568.                                               to play in the file. It is
  569.                                               calculated the same way as the
  570.                                               number of bytes in the sample
  571.                                               (see above).
  572.  
  573.  16 - 19        ???                           This points to the last byte in
  574.                                               the sample to play. Calculated
  575.                                               the same as above.
  576.  
  577.  20 - 21        ???                           Sampling rate of the sample.
  578.                                               Valid values are 22 KHz, 11 KHz,
  579.                                               7.33 , and 5.5 K, but if
  580.                                               given a number not listed
  581.                                               above, it will be played at the
  582.                                               closest valid sampling rate.
  583.                                               So, 9 KHz would be played at
  584.                                               11 Khz.
  585.                                               This is calculated as follows:
  586.                                               SamRate =  Byte1 + (256 * Byte2)
  587.  
  588.  22 - 23        ???                           Bits per sample. Ex: Sound
  589.                                               Blaster can only do 8, Sound
  590.                                               Blaster 16 can make 16.
  591.                                               Normally, the only valid value
  592.                                               is 0, which is the code for an
  593.                                               8 bit sample. Future versions
  594.                                               of Sounder and DSOUND.DLL may
  595.                                               allow 16 bit samples and such.
  596.  
  597.  24 - 25        ???                           Volume to play the sample back
  598.                                               at. Note: On the PC's Internal
  599.                                               Speaker, there is a definite
  600.                                               upper limit as to the volume,
  601.                                               depending on the shift value
  602.                                               (see below). The Sound Blaster
  603.                                               and the Disney Sound Source
  604.                                               aren't quite as restricted,
  605.                                               but still are at some high
  606.                                               value.
  607.  
  608.  26 - 27        4, 0                          Shift value. This is the number
  609.                                               that each byte is divided by to
  610.                                               "scale" the volume down to a
  611.                                               point where the PC's Internal
  612.                                               Speaker can handle it. See the
  613.                                               discussion on playing back
  614.                                               digitalized sound for more
  615.                                               details.
  616.  
  617.  28 - 123       ???                           This is the name of the sample.
  618.                                               It is followed by an ASCII 0.
  619.  
  620.    Information from Sounder text files and Sound Tool help (.HLP) files.
  621.                          Rewritten by Edward Schlunder